package message

// MarkdownBody Markdown 消息体。
type MarkdownBody struct {
	Title     string   `json:"title"`     // 首屏会话透出的展示内容
	Text      string   `json:"text"`      // Markdown 格式的消息
	IsAtAll   bool     `json:"isAtAll"`   // @所有人
	AtMobiles []string `json:"atMobiles"` // 被@人的手机号
}

// Markdown Markdown 消息。
type Markdown struct {
	Message
	MarkdownBody *MarkdownBody `json:"markdown"`
}

// NewMarkdown 创建一个新的 Markdown 消息实例。
func NewMarkdown() *Markdown {
	m := &Markdown{}
	m.SetType("markdown")
	return m
}

// SetTitle 设置消息标题。
func (m *Markdown) SetTitle(title string) *Markdown {
	if m.MarkdownBody == nil {
		m.setDefaultMarkdownBody()
	}
	m.MarkdownBody.Title = title
	return m
}

// SetText 设置 Markdown 格式的消息内容。
func (m *Markdown) SetText(text string) *Markdown {
	if m.MarkdownBody == nil {
		m.setDefaultMarkdownBody()
	}
	m.MarkdownBody.Text = text
	return m
}

// GetContent 获取消息内容。
func (m *Markdown) GetContent() string {
	if m.MarkdownBody == nil {
		return ""
	}
	return m.MarkdownBody.Text
}

// AppendLine 向 Markdown 消息内容追加一行。
func (m *Markdown) AppendLine(line string) {
	if m.MarkdownBody == nil {
		m.setDefaultMarkdownBody()
	}
	if m.MarkdownBody.Text == "" {
		m.MarkdownBody.Text = line
	} else {
		m.MarkdownBody.Text += "\n" + line
	}
}

// setDefaultMarkdownBody 设置默认 Markdown 消息体。
func (m *Markdown) setDefaultMarkdownBody() *Markdown {
	m.MarkdownBody = &MarkdownBody{}
	return m
}

// SetIsAll 设置是否 @所有人。
func (m *Markdown) SetIsAll(isAll bool) *Markdown {
	if m.MarkdownBody == nil {
		m.setDefaultMarkdownBody()
	}
	m.MarkdownBody.IsAtAll = isAll
	return m
}

// SetAtMobiles 设置被 @人的手机号列表。
func (m *Markdown) SetAtMobiles(mobiles []string) *Markdown {
	if m.MarkdownBody == nil {
		m.setDefaultMarkdownBody()
	}
	m.MarkdownBody.AtMobiles = mobiles
	return m
}
